package com.atguigu.test6;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author 路飞
 * @date 2024/3/28 16:30
 * @description 1个字符串中可能包含a-z中的多个字符，字符也可能重复，
 * 例如：String data = “aabcexmkduyruieiopxzkkkkasdfjxjdsds”;
 * 写一个程序，对于给定一个这样的字符串求出字符串出现次数最多的那个字母以及出现的次数
 * （若次数最多的字母有多个，则全部求出）
 * (有并列可能)
 */
public class Test2 {
    public static void main(String[] args) {
        String data = "aabcexmkduyraudieiopaxzkkkkasdfjxjdsds";
        Map<Character, Integer> map = new HashMap<>();
        for (Character c : data.toCharArray()) {
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        // 将map转换为list
        List<Map.Entry<Character, Integer>> collect = map.entrySet().stream().toList();
        System.out.println(collect);

        // 降序排列,所以第一个值就是最大值
        collect = collect.stream().sorted((c1, c2) -> c2.getValue() - c1.getValue()).collect(Collectors.toList());
        System.out.println(collect);

        int max = collect.get(0).getValue();
        // 继续往后遍历这个集合，后面不会还有比第一个值大的元素了，最多和第一个元素相同
        // 把这些最大值，又添加到一个List中
        List<Map.Entry<Character, Integer>> maxList = new ArrayList<>();
        collect.stream().forEach(entry -> {
            if (entry.getValue() >= max) {
                maxList.add(entry);
            }
        });
        System.out.println(maxList);
    }
}
